package cn.tedu.test03;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * 1.加载Bean的定义，加载Bean定义后，不会立马创建Bean对象
 *   -->1.Spring启动后，根据配置文件加载Bean的定义，包括处理@Bean 和@Component注解
 *   -->2.找到Bean定义后，将转换应用于Bean定义，也就是可以进一步修改处理Bean定义。
 *   -->3.处理Bean定义的时候调用了一些列实现BeanFactoryPostProcessor接口的对象。
 *   -->4.可以自行扩展该接口，参与Bean定义的处理功能
 *   -->5.其中包括处理@PropertySource，@Value注解的PropertySourcesPlaceholderConfigurer，该类就是基于BeanFactoryPostProcessor的实现，用于读取Spring Enviroment中的属性值
 * 2.实例化Bean对象，这一步才开始创建
 *   -->1.首先查找Bean的依赖关系，解决Bean创建的先后次序问题
 *   -->2.实例化Bean对象
 *   -->3.通过setter方法注入
 * 3.Bean的初始化，指的对象创建完成之后的处理过程
 *   -->BeanPostProcessor来进行对象的前置处理
 *   -->执行自定义初始化方法
 *   -->执行BeanPostProcessor的后置处理
 *   -->该步骤依旧可以自行干预
 */
public class Main {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context =
                new AnnotationConfigApplicationContext(SpringConfig.class);
        User bean = context.getBean(User.class);
        bean.getName();
//        context.close();
    }
}